/* indent size: 2 */

module.exports = (app) => {
  const DataTypes = app.Sequelize;

  const User = app.model.define(
    'user',
    {
      id: {
        type: DataTypes.INTEGER,
        unique: true,
        primaryKey: true,
        autoIncrement: true,
        allowNull: false,
      },
      name: {
        type: DataTypes.STRING(32),
        allowNull: false,
        unique: false,
      },
      age: {
        type: DataTypes.INTEGER,
        allowNull: true,
      },
      gender: {
        type: DataTypes.STRING(10),
        allowNull: true,
      },
      phone: {
        type: DataTypes.STRING(20),
        allowNull: true,
      },
      createdAt: {
        type: DataTypes.DATE,
        allowNull: true,
        field: 'created_at',
      },
      updatedAt: {
        type: DataTypes.DATE,
        allowNull: true,
        field: 'updated_at',
      },
    },
    {
      tableName: 'user',
      // 要使用 createdAt/updatedAt 必须开启这项配置
      timestamps: true,
      freezeTableName: true,
    }
  );

  // 数据库同步
  // User.sync(); // ：如果数据库表不存在，则创建数据库表，如果存在，则不做任何操作

  // User.sync({ force: true });//：如果数据库表已经存在，则先删除数据库表，然后重新创建数据表
  User.sync({ alter: true }); //： 这个会比较数据库表当前状态（比如数据库表的列及数据类型等）与模型的不同之处，然后修改数据库表不同的地方以匹配模型

  User.associate = function () {
    app.model.User.hasMany(app.model.Animal, {
      foreignKey: 'userId',
      targetKey: 'id',
      as: 'animals',
    });
  };

  return User;
};
